import 'package:gold/generated/json/base/json_field.dart';
import 'package:gold/generated/json/order_model.g.dart';
import 'dart:convert';

export 'package:gold/generated/json/order_model.g.dart';

@JsonSerializable()
class OrderModel {
	/// 订单ID
	int? id;
	@JSONField(name: 'order_no')
	/// 订单编号
	String? orderNo;
	/// 商品总数量
	int? quantity;
	/// 商品总价
	@JSONField(name: 'total_price')
	double? totalPrice;
	/// 订单状态:-1=已取消,0=待支付,1=待发货,2=待收货（待提货）,3=待评价,4=已完成,5=已授权
	String? status;
	/// 退款状态:0=未申请,1=申请中,2=通过退款,3=拒绝退款
	@JSONField(name: 'refund_status')
	int? refundStatus;
	/// 订单创建时间
	@JSONField(name: 'created_at')
	String? createdAt;
	/// 快递费
	double? freight;
	/// 积分抵扣数量
	@JSONField(name: 'points_num')
	int? pointsNum;
	/// 积分抵扣金额
	@JSONField(name: 'points_price')
	int? pointsPrice;
	/// 余额抵扣数量
	@JSONField(name: 'amount_num')
	double? amountNum;
	/// 实际支付金额
	@JSONField(name: 'pay_price')
	double? payPrice;
	/// 赠送积分数
	@JSONField(name: 'reward_points')
	int? rewardPoints;
	/// 确认收货时间
	@JSONField(name: 'received_at')
	String? receivedAt;
	/// 授权提货时间
	@JSONField(name: 'grant_at')
	String? grantAt;
	/// 提货码
	@JSONField(name: 'pickup_code')
	String? pickupCode;
	/// 快递公司
	@JSONField(name: 'express_com')
	String? expressCom;
	/// 快递单号
	@JSONField(name: 'express_nu')
	String? expressNu;
	/// 订单商品
	OrderDetail? detail;
	/// 快递信息
	ExpressModel? express;
	/// 收货地址
	OrderAddress? address;
	/// 店铺信息
	OrderShop? shop;
	/// 是否展示收货人信息，店铺订单时用
	bool? showAddress;

	OrderModel();

	factory OrderModel.fromJson(Map<String, dynamic> json) => $OrderModelFromJson(json);

	Map<String, dynamic> toJson() => $OrderModelToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

@JsonSerializable()
class OrderDetail {
	/// 产品ID
	@JSONField(name: 'product_id')
	int? productId;
	/// 数量
	int? quantity;
	/// 商品详情
	OrderDetailProduct? product;

	OrderDetail();

	factory OrderDetail.fromJson(Map<String, dynamic> json) => $OrderDetailFromJson(json);

	Map<String, dynamic> toJson() => $OrderDetailToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

@JsonSerializable()
class OrderDetailProduct {
	/// 商品名
	String? name;
	/// 商品封面
	@JSONField(name: 'cover_image')
	String? coverImage;
	/// 商家价格
	double? price;
	/// 积分价格
	@JSONField(name: 'points_price')
	int? pointsPrice;
	/// 市场价
	@JSONField(name: 'market_price')
	double? marketPrice;
	/// 赠送积分数
	@JSONField(name: 'reward_points')
	int? rewardPoints;
	/// 运费
	double? freight;

	OrderDetailProduct();

	factory OrderDetailProduct.fromJson(Map<String, dynamic> json) => $OrderDetailProductFromJson(json);

	Map<String, dynamic> toJson() => $OrderDetailProductToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

@JsonSerializable()
class OrderAddress {
	/// 地址ID
	int? id;
	@JSONField(name: "user_id")
	int? userId;
	/// N：未知、M：男、F：女
	String? sex;
	/// 联系人
	String? name;
	/// 联系电话
	String? phone;
	/// 详细地址
	String? address;
	/// 门牌号
	@JSONField(name: "house_number")
	String? houseNumber;
	/// 0=不默认，1=默认
	@JSONField(name: "is_default")
	int? isDefault;
	@JSONField(name: "created_at")
	String? createdAt;
	@JSONField(name: "updated_at")
	String? updatedAt;

	OrderAddress();

	factory OrderAddress.fromJson(Map<String, dynamic> json) => $OrderAddressFromJson(json);

	Map<String, dynamic> toJson() => $OrderAddressToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

@JsonSerializable()
class OrderShop {
	/// 店铺id
	int? id;
	/// 店铺名称
	String? name;
	/// 店铺logo
	@JSONField(name: 'logo_url')
	String? logoUrl;

	OrderShop();

	factory OrderShop.fromJson(Map<String, dynamic> json) => $OrderShopFromJson(json);

	Map<String, dynamic> toJson() => $OrderShopToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

/// 物流信息
@JsonSerializable()
class ExpressModel {
	@JSONField(name: 'showapi_res_error')
	String? showApiResError;
	@JSONField(name: 'showapi_fee_num')
	int? showApiFeeNum;
	@JSONField(name: 'showapi_res_code')
	int? showApiResCode;
	@JSONField(name: 'showapi_res_id')
	String? showApiResId;
	@JSONField(name: 'showapi_res_body')
	ExpressDetail? expressDetail;

	ExpressModel();

	factory ExpressModel.fromJson(Map<String, dynamic> json) => $ExpressModelFromJson(json);

	Map<String, dynamic> toJson() => $ExpressModelToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

@JsonSerializable()
class ExpressDetail {
	/// "更新时间戳
	int? update;
	/// "提示信息，用于提醒用户可能出现的情况
	@JSONField(name: 'upgrade_info')
	String? upgradeInfo;
	/// 更新时间
	String? updateStr;
	/// 快递公司 logo
	String? logo;
	/// 数据节点的长度
	int? dataSize;
	/// 快递状态 1 暂无记录 2 在途中 3 派送中 4 已签收 (完结状态) 5 用户拒签 6 疑难件 7 无效单(完结状态) 8 超时单 9 签收失败 10 退回
	int? status;
	/// 计费次数。例如：0 为计费 0 次，即不计费；1 为计费 1 次
	@JSONField(name: 'fee_num')
	int? feeNum;
	/// 快递公司联系方式
	String? tel;
	/// 在途跟踪数据
	List<ExpressDetailData>? data;
	/// 快递编码
	String? expSpellName;
	/// 返回提示信息
	String? msg;
	/// 快递单号
	String? mailNo;
	/// 无走件记录时被查询次数 注意：在 24 小时内，查询次数>10 次将会计费
	int? queryTimes;
	/// 0 查询成功 或 提交成功。 1 输入参数错误。 2 查不到物流信息。 3 单号不符合规则。 4 快递
	/// 公司编码不符合规则。 5 快递查询渠道异常。 6 auto 时未查到单号对应的快递公司,请指定快递公司编码。 7 单
	/// 号与手机号不匹配 其他参数：接口调用失败
	@JSONField(name: 'ret_code')
	int? retCode;
	/// true：查询成功，表示ret_code=0且data的长度>0。可使用本字段做是否读取data列表的依据。false：查询失败。
	bool? flag;
	/// 快递简称
	String? expTextName;
	/// 自动识别结果
	dynamic possibleExpList;

	ExpressDetail();

	factory ExpressDetail.fromJson(Map<String, dynamic> json) => $ExpressDetailFromJson(json);

	Map<String, dynamic> toJson() => $ExpressDetailToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}

@JsonSerializable()
class ExpressDetailData {
	/// 物流跟踪发生的时间
	String? time;
	/// 物流跟踪信息
	String? context;

	ExpressDetailData();

	factory ExpressDetailData.fromJson(Map<String, dynamic> json) => $ExpressDetailDataFromJson(json);

	Map<String, dynamic> toJson() => $ExpressDetailDataToJson(this);

	@override
	String toString() {
		return jsonEncode(this);
	}
}